// 泛型函数格式1： 函数名<定义的泛型类型>(参数中可以使用泛型类型):返回值也可以是泛型类型
// 泛型函数格式2： 函数名<定义的泛型类型1,定义的泛型类型2>(参数中可以使用泛型类型):返回值也可以是泛型类型
//  泛型函数带来的好处
// // 泛型函数可以在调用返回后得到返回值的具体数据类型，从而可以有自动方法和属性的提示和错误的编译提示

function quickSort<T>(arr: Array<T>): Array<T> {
  if (arr.length < 2) {
    return arr
  }

  var left: Array<T> = []
  var right: Array<T> = []
  var mid = arr.splice(Math.floor(arr.length / 2), 1)[0]
  console.log('mid:', mid)
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] < mid) {
      left.push(arr[i])
    } else {
      right.push(arr[i])
    }
  }
  return quickSort(left).concat(mid, quickSort(right))
}

var chineseArr = [3, 1, 8, 9, 20, 15, 2, 7, 13, 11, 19, 18, 5, 6, 17, 4]

let chineseArrSort = quickSort<number>(chineseArr)
console.log('chineseArrSort:', chineseArrSort)
chineseArrSort.forEach(item => {

})

let strArr: Array<string> = ['cba', 'kkdf', 'ndf', 'bcdf', 'dfd', 'cdf']
let strArrSort = quickSort(strArr)

console.log('strArrSort:', strArrSort)
export {}
